package orderoid.formulaire;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.ExecutionException;

import orderoid.singleton.SingletonCommande;
import orderoid.singleton.SingletonRestaurant;
import orderoid.soap.Tool.MyListAdapterProduit;
import orderoid.soap.business.webRechercherIdProduitFromRestauAnProdName;
import orderoid.soap.business.webRechercherProduitFromRestau;
import orderoid.soap.classeCommune.Produit;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;

public class OrderoidListeProduitActivity extends Activity
{

	private ListView	listProduit;
	private List<String>	listProduitValider;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		listProduitValider= new ArrayList<String>();
		
		setContentView(R.layout.liste_produit);

		// récupération de la variable via Singleton
		String idRestaurant = Integer.toString(SingletonRestaurant.getInstance().getRestaurant().getIdRestaurant());
		
		// Recuperation de la listview creee dans le fichier main.xml
		listProduit = (ListView) findViewById(R.id.listProduit);

		// Creation de la ArrayList qui nous permettra de remplire la listView
		ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();

		List<Produit> produits = initProduits(idRestaurant);

		// On declare la HashMap qui contiendra les informations pour un item
		HashMap<String, String> map;

		for (Produit p : produits)
		{
			map = new HashMap<String, String>();

			// on recupere toute les informations qui nous interessent dans une
			// hash map
			map.put("titre", p.getNom());
			map.put("prix_produit", Double.toString(p.getMontant()) + "€");
			if (p.getPromotion() != null)
			{
				map.put("description","Actuellement avec une promotion de " + Double.toString(p.getPromotion()) + "% depechez vous!");
			}
			// que l'on stocke dans une array list d'affichage
			listItem.add(map);
		}

		// Creation d'un SimpleAdapter qui se chargera de mettre les items
		// present dans notre list (listItem) dans la vue affichageitem
		 MyListAdapterProduit mSchedule = new MyListAdapterProduit(this.getBaseContext(), listItem, R.layout.affichage_produit, new String[] { "titre","prix_produit","promotion" },
				new int[] { R.id.titre,R.id.prix_produit,R.id.description });

		// On attribut a notre listView l'adapter que l'on vient de creer
		listProduit.setAdapter(mSchedule);
	}

	private List<Produit> initProduits(String idRestaurant)
	{
		List<Produit> produits = new ArrayList<Produit>();

		webRechercherProduitFromRestau ws = new webRechercherProduitFromRestau();

		try
		{
			produits = ws.execute(idRestaurant).get();
		} catch (InterruptedException e)
		{
			produits = null;
			e.printStackTrace();
		} catch (ExecutionException e)
		{
			e.printStackTrace();
			produits = null;
		}

		return produits;
	}

	public void retourAccueil(View view)
	{
		Intent accueil = new Intent(this, OrderoidMainActivity.class);
		// lance la fenetre precedente
		startActivity(accueil);
	}

	public void voirPanier(View view)
	{
		Intent pannier = new Intent(this, OrderoidValidationPanierActivity.class);
		// lance la fenetre suivante
		startActivity(pannier);
	}

	// Fonction appelée au clic d'une des checkbox
	public void MyHandler(View v)
	{
		CheckBox cb = (CheckBox) v;
		// on récupère la position à l'aide du tag défini dans la classe MyListAdapter
		int position = Integer.parseInt(cb.getTag().toString());

		// On récupère l'élément sur lequel on va changer la couleur 
		View o = listProduit.getChildAt(position).findViewById(R.id.GridLayout1);
		//et recuperé la valeur
		TextView prodName =(TextView) listProduit.getChildAt(position).findViewById(R.id.titre);
		// On change la couleur
		if (cb.isChecked())
		{
			o.setBackgroundResource(R.color.green);
			listProduitValider.add(prodName.getText().toString());
		}
		else
		{
			listProduitValider.remove(prodName.getText().toString());
			o.setBackgroundResource(R.color.blue);
		}
	}

	public void validerProduit(View view)
	{
		Intent pannier = new Intent(this, OrderoidValidationPanierActivity.class);

		// initialisation checkbox
//		CheckBox checkBoxProduit = (CheckBox) findViewById(R.id.checkBoxProduit);

		webRechercherIdProduitFromRestauAnProdName ws = new webRechercherIdProduitFromRestauAnProdName();
		String idRestaurant = Integer.toString(SingletonRestaurant.getInstance().getRestaurant().getIdRestaurant());
		
		//on transfert la liste d'objets produit dans notre singleton de commande
		//suite a un souci de comprehension du mode de fonctionnement de String... une méthode plsu abrute a été conservé
		String concatenationDeCommande = new String();
		for(String produit : listProduitValider)
		{
			concatenationDeCommande += ";;" + produit;
		}
		
		try
		{
			SingletonCommande.getInstance().getCommande().setListProduit(ws.execute(idRestaurant,concatenationDeCommande).get());
		} catch (InterruptedException e)
		{
			e.printStackTrace();
		} catch (ExecutionException e)
		{
			e.printStackTrace();
		}

//		TextView TextViewtitreProduit = (TextView) findViewById(R.id.titre);
//		String titreProduit = TextViewtitreProduit.getText().toString();
//		if (checkBoxProduit.isEnabled() == true)
//		{
//			pannier.putExtra("nomProduit", titreProduit);
//		}
		// lance la fenetre suivante
		startActivity(pannier);
	}
}